package main

//函数不能捕获内部重新启动的goroutine所抛出的异常

//func do() {
//	defer func() {
//		if err := recover(); err != nil {
//			fmt.Println(err)
//		}
//	}()
//	go da()
//	go db()
//	time.Sleep(3 * time.Second)
//}
//
//func da() {
//	panic("panic da")
//	for i := 0; i < 10; i++ {
//		fmt.Println(i)
//	}
//}
//
//func db() {
//	for i := 0; i < 10; i++ {
//		fmt.Println(i)
//	}
//}
//
//func main() {
//	do()
//}

/*
以下两种情况主动调用panic函数抛出panic
1	程序遇到了无法正常执行下去的错误，主动调用panic函数结束程序运行
2	在调试程序时，通过主动调用panic实现快速退出，panic打印出的堆栈能够更快地定位错误

为了保证程序的健壮性，需要在程序的分支流程上使用recover()拦截运行时错误
*/
